#pragma once

#include <iostream>
#include <string>
#include <strings.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include "Log.hpp"

using namespace LogModule;

const int defaultfd = -1;

class UdpServer
{
public:
    UdpServer(const std::string &ip, uint16_t port)
        : _sockfd(defaultfd),
          _ip(ip),
          _port(port)
    {
    }
    void Init()
    {
        // // 1. 创建套接字
        // _sockfd = socket(AF_INET, SOCK_DGRAM, 0);
        // if (_sockfd < 0)
        // {
        //     LOG(LogLevel::FATAL) << "socket error!";
        //     exit(1);
        // }
        // LOG(LogLevel::INFO) << "socket success, sockfd : " << _sockfd;

        // // 2. 绑定socket信息，ip和端口， ip(比较特殊，后续解释)
        // // 2.1 填充sockaddr_in结构体
        // struct sockaddr_in local;
        // bzero(&local, sizeof(local));
        // local.sin_family = AF_INET;
        // // 我会不会把我的IP地址和端口号发送给对方？
        // // IP信息和端口信息，一定要发送到网络！
        // // 本地格式->网络序列
        // local.sin_port = htons(_port);
        // // IP也是如此，1. IP转成4字节 2. 4字节转成网络序列 -> in_addr_t inet_addr(const char *cp);
        // // local.sin_addr.s_addr = ??;

        // // int n = bind(_sockfd, );
    }
    void Start()
    {
    }
    ~UdpServer()
    {
    }

private:
    int _sockfd;
    uint16_t _port;
    std::string _ip; // 用的是字符串风格，点分十进制
};